home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 22 / AMUG_22-1.ISO / Files / Internet / Java / ET Applets 1.1.sit / ET Applets 1.1 / Common / ET_ImageMenu.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-08-01  |  7.5 KB  |  354 lines  |  [TEXT/ttxt]

  1. import java.applet.Applet;
  2. import java.awt.Color;
  3. import java.awt.Component;
  4. import java.awt.Dimension;
  5. import java.awt.Event;
  6. import java.awt.FontMetrics;
  7. import java.awt.Graphics;
  8. import java.awt.Image;
  9. import java.awt.MediaTracker;
  10. import java.awt.Rectangle;
  11. import java.net.MalformedURLException;
  12. import java.net.URL;
  13. import java.util.StringTokenizer;
  14. import java.util.Vector;
  15.  
  16. public final class ET_ImageMenu extends Applet implements Runnable {
  17.    static final boolean REG_VERSION = false;
  18.    // $FF: renamed from: RT java.lang.String
  19.    static final String field_0 = "(This applet is not for commercial use. Visit http://www.entanke.se/ for information and more applets.)";
  20.    static final String APPLETINFO = "ET Image Menu v1.1. Visit http://www.entanke.se/ for information and more applets.";
  21.    Image offScreenImage;
  22.    Dimension offScreenSize;
  23.    Graphics offScreenGraphics;
  24.    Graphics appletGraphics;
  25.    private Thread kicker;
  26.    static final int S_NORMAL = 0;
  27.    static final int S_OVER = 1;
  28.    static final int S_CLICK = 2;
  29.    static final int DEF_BGCOLOR = 16777215;
  30.    static final Rectangle DEF_AREA = null;
  31.    static final URL DEF_URL = null;
  32.    static final String DEF_TARGETFRAME = "_self";
  33.    static final String DEF_ALT = null;
  34.    static final URL DEF_IMAGE = null;
  35.    static final URL DEF_CLICKIMAGE = null;
  36.    static final URL DEF_OVERIMAGE = null;
  37.    static final String DEF_BEHAVIOUR = "Normal";
  38.    Vector parArea = new Vector();
  39.    Vector parURL = new Vector();
  40.    Vector parTargetFrame = new Vector();
  41.    Vector parALT = new Vector();
  42.    URL parImage;
  43.    URL parOverImage;
  44.    URL parClickImage;
  45.    Integer parBGColor;
  46.    String parBehaviour;
  47.    Vector areaGraphics = new Vector();
  48.    Image normalImage;
  49.    Image overImage;
  50.    Image clickImage;
  51.    Color BGColor;
  52.    static final int OVER_NONE = -1;
  53.    static final int MOUSE_UP = 0;
  54.    static final int MOUSE_DOWN = 1;
  55.    int statLastOver = -1;
  56.    int statLastMouse = 0;
  57.    int statLastPushed = -1;
  58.    boolean parStayPushed = false;
  59.  
  60.    public void init() {
  61.       Dimension var1 = ((Component)this).size();
  62.       this.offScreenImage = ((Component)this).createImage(var1.width, var1.height);
  63.       this.offScreenSize = var1;
  64.       this.offScreenGraphics = this.offScreenImage.getGraphics();
  65.       this.appletGraphics = ((Component)this).getGraphics();
  66.       this.parBGColor = this.getIntegerParameter("BGColor", new Integer(16777215), 16);
  67.       this.BGColor = new Color(this.parBGColor);
  68.       this.parImage = this.getURLParameter("Image", (URL)null);
  69.       this.parOverImage = this.getURLParameter("OverImage", (URL)null);
  70.       this.parClickImage = this.getURLParameter("ClickImage", (URL)null);
  71.       this.parBehaviour = this.getStringParameter("Behaviour", "Normal");
  72.       this.parStayPushed = this.parBehaviour.equalsIgnoreCase("StayPushed");
  73.       boolean var2 = true;
  74.  
  75.       for(int var3 = 1; var2; ++var3) {
  76.          if (var3 == 1) {
  77.             this.parArea.addElement(this.getAreaParameter("Area1", (Rectangle)null));
  78.             this.parURL.addElement(this.getURLParameter("URL1", (URL)null));
  79.             this.parTargetFrame.addElement(this.getStringParameter("TargetFrame1", "_self"));
  80.             this.parALT.addElement(this.getStringParameter("ALT1", (String)null));
  81.          } else if (this.getStringParameter("Area" + var3, (String)null) != null) {
  82.             this.parArea.addElement(this.getAreaParameter("Area" + var3, (Rectangle)null));
  83.             this.parURL.addElement(this.getURLParameter("URL" + var3, (URL)null));
  84.             this.parTargetFrame.addElement(this.getStringParameter("TargetFrame" + var3, (String)this.parTargetFrame.elementAt(var3 - 2)));
  85.             this.parALT.addElement(this.getStringParameter("ALT" + var3, (String)null));
  86.          } else {
  87.             var2 = false;
  88.          }
  89.       }
  90.  
  91.       this.offScreenGraphics.setColor(this.BGColor);
  92.       this.offScreenGraphics.fillRect(0, 0, this.offScreenSize.width, this.offScreenSize.height);
  93.       FontMetrics var4 = this.offScreenGraphics.getFontMetrics(this.offScreenGraphics.getFont());
  94.       this.offScreenGraphics.setColor(Color.gray);
  95.       this.offScreenGraphics.drawString("(loading)", (((Component)this).size().width - var4.stringWidth("(loading)")) / 2, ((Component)this).size().height / 2);
  96.  
  97.       for(int var5 = 0; var5 < this.parArea.size(); ++var5) {
  98.          if (this.parArea.elementAt(var5) == null) {
  99.             this.areaGraphics.addElement((Object)null);
  100.          } else {
  101.             Rectangle var6 = (Rectangle)this.parArea.elementAt(var5);
  102.             this.areaGraphics.addElement(this.offScreenGraphics.create(var6.x, var6.y, var6.width, var6.height));
  103.          }
  104.       }
  105.  
  106.    }
  107.  
  108.    private Integer getIntegerParameter(String var1, int var2, int var3) {
  109.       return this.getIntegerParameter(var1, new Integer(var2), var3);
  110.    }
  111.  
  112.    private Integer getIntegerParameter(String var1, Integer var2, int var3) {
  113.       String var4 = ((Applet)this).getParameter(var1);
  114.  
  115.       try {
  116.          Integer var5 = new Integer(Integer.parseInt(var4, var3));
  117.          return var5;
  118.       } catch (NumberFormatException var6) {
  119.          return var2;
  120.       }
  121.    }
  122.  
  123.    private String getStringParameter(String var1, String var2) {
  124.       String var3 = ((Applet)this).getParameter(var1);
  125.       return var3 == null ? var2 : var3;
  126.    }
  127.  
  128.    private URL getURLParameter(String var1, URL var2) {
  129.       String var3 = this.getStringParameter(var1, (String)null);
  130.  
  131.       try {
  132.          URL var4 = new URL(((Applet)this).getDocumentBase(), var3);
  133.          return var4;
  134.       } catch (MalformedURLException var5) {
  135.          return var2;
  136.       }
  137.    }
  138.  
  139.    private Rectangle getAreaParameter(String var1, Rectangle var2) {
  140.       String var3 = this.getStringParameter(var1, (String)null);
  141.       if (var3 == null) {
  142.          return var2;
  143.       } else {
  144.          StringTokenizer var4 = new StringTokenizer(var3);
  145.          return new Rectangle(Integer.parseInt(var4.nextToken()), Integer.parseInt(var4.nextToken()), Integer.parseInt(var4.nextToken()), Integer.parseInt(var4.nextToken()));
  146.       }
  147.    }
  148.  
  149.    public String getAppletInfo() {
  150.       return "ET Image Menu v1.1. Visit http://www.entanke.se/ for information and more applets.";
  151.    }
  152.  
  153.    public final void update(Graphics var1) {
  154.       var1.drawImage(this.offScreenImage, 0, 0, this);
  155.    }
  156.  
  157.    public final void paint(Graphics var1) {
  158.       var1.drawImage(this.offScreenImage, 0, 0, this);
  159.    }
  160.  
  161.    public void start() {
  162.       if (this.kicker == null) {
  163.          this.kicker = new Thread(this, "ImageMenu");
  164.          this.kicker.start();
  165.       }
  166.  
  167.       ((Applet)this).showStatus("ET Image Menu v1.1. Visit http://www.entanke.se/ for information and more applets.");
  168.    }
  169.  
  170.    public void stop() {
  171.       if (this.kicker != null && this.kicker.isAlive()) {
  172.          this.kicker.stop();
  173.       }
  174.  
  175.       this.kicker = null;
  176.    }
  177.  
  178.    private Image getImageAndWait(URL var1) {
  179.       if (var1 != null) {
  180.          Image var2 = ((Applet)this).getImage(var1);
  181.          if (var2 != null) {
  182.             MediaTracker var3 = new MediaTracker(this);
  183.             var3.addImage(var2, 1);
  184.  
  185.             try {
  186.                var3.waitForID(1);
  187.             } catch (InterruptedException var4) {
  188.             }
  189.          }
  190.  
  191.          return var2;
  192.       } else {
  193.          return null;
  194.       }
  195.    }
  196.  
  197.    public void run() {
  198.       this.normalImage = this.getImageAndWait(this.parImage);
  199.       this.offScreenGraphics.setColor(this.BGColor);
  200.       this.offScreenGraphics.fillRect(0, 0, this.offScreenSize.width, this.offScreenSize.height);
  201.       this.offScreenGraphics.drawImage(this.normalImage, 0, 0, this);
  202.       Graphics var1 = this.appletGraphics;
  203.       var1.drawImage(this.offScreenImage, 0, 0, this);
  204.       this.overImage = this.getImageAndWait(this.parOverImage);
  205.       this.clickImage = this.getImageAndWait(this.parClickImage);
  206.  
  207.       while(this.parStayPushed) {
  208.          URL var4 = ET_MenuHelper.recive();
  209.  
  210.          for(int var2 = 0; var2 < this.parArea.size(); ++var2) {
  211.             try {
  212.                if (((URL)this.parURL.elementAt(var2)).sameFile(var4)) {
  213.                   this.updateMenu(var2, 0);
  214.                   this.updateMenu(var2, 1);
  215.                   this.updateMenu(var2, 0);
  216.                }
  217.             } catch (NullPointerException var3) {
  218.             }
  219.          }
  220.  
  221.          this.delay(200);
  222.       }
  223.  
  224.    }
  225.  
  226.    private final void updateMenu(int var1, int var2) {
  227.       if (this.statLastOver != var1) {
  228.          if (var1 != -1 && this.parALT.elementAt(var1) != null) {
  229.             ((Applet)this).showStatus((String)this.parALT.elementAt(var1) + "  " + "(This applet is not for commercial use. Visit http://www.entanke.se/ for information and more applets.)");
  230.          } else {
  231.             ((Applet)this).showStatus("(This applet is not for commercial use. Visit http://www.entanke.se/ for information and more applets.)");
  232.          }
  233.       }
  234.  
  235.       if (this.statLastOver != var1) {
  236.          if (this.statLastMouse == 1) {
  237.             if (!this.parStayPushed) {
  238.                this.drawImage(this.statLastPushed, 0, this.offScreenGraphics);
  239.                this.drawImage(this.statLastPushed, 2, this.offScreenGraphics);
  240.             }
  241.          } else {
  242.             if (!this.parStayPushed || var1 != this.statLastPushed) {
  243.                this.drawImage(var1, 1, this.offScreenGraphics);
  244.             }
  245.  
  246.             if (!this.parStayPushed || this.statLastOver != this.statLastPushed) {
  247.                this.drawImage(this.statLastOver, 0, this.offScreenGraphics);
  248.             }
  249.  
  250.             this.statLastOver = var1;
  251.          }
  252.  
  253.          if (this.parStayPushed) {
  254.             this.statLastOver = var1;
  255.          }
  256.  
  257.          Graphics var3 = this.appletGraphics;
  258.          var3.drawImage(this.offScreenImage, 0, 0, this);
  259.       }
  260.  
  261.       if (this.statLastMouse != var2) {
  262.          if (var2 == 1) {
  263.             if (var1 != -1) {
  264.                this.drawImage(this.statLastPushed, 0, this.offScreenGraphics);
  265.                this.statLastPushed = var1;
  266.             }
  267.  
  268.             this.drawImage(var1, 2, this.offScreenGraphics);
  269.          } else {
  270.             if (!this.parStayPushed || var1 != this.statLastPushed) {
  271.                this.drawImage(var1, 1, this.offScreenGraphics);
  272.             }
  273.  
  274.             if (!this.parStayPushed && var1 != this.statLastPushed) {
  275.                this.drawImage(this.statLastPushed, 0, this.offScreenGraphics);
  276.             }
  277.          }
  278.  
  279.          this.statLastMouse = var2;
  280.          Graphics var4 = this.appletGraphics;
  281.          var4.drawImage(this.offScreenImage, 0, 0, this);
  282.       }
  283.  
  284.    }
  285.  
  286.    public boolean handleEvent(Event var1) {
  287.       switch (var1.id) {
  288.          case 501:
  289.             this.updateMenu(this.statLastOver, 1);
  290.             return true;
  291.          case 502:
  292.             this.updateMenu(this.statLastOver, 0);
  293.             if (this.statLastOver == this.statLastPushed && this.statLastOver != -1 && (URL)this.parURL.elementAt(this.statLastOver) != null) {
  294.                ((Applet)this).getAppletContext().showDocument((URL)this.parURL.elementAt(this.statLastOver), (String)this.parTargetFrame.elementAt(this.statLastOver));
  295.             }
  296.  
  297.             return true;
  298.          case 503:
  299.          case 506:
  300.             this.updateMenu(this.getMouseOver(var1.x, var1.y), this.statLastMouse);
  301.             return true;
  302.          case 504:
  303.          default:
  304.             return super.handleEvent(var1);
  305.          case 505:
  306.             this.updateMenu(-1, 0);
  307.             ((Applet)this).showStatus("");
  308.             return true;
  309.       }
  310.    }
  311.  
  312.    private int getMouseOver(int var1, int var2) {
  313.       int var3 = -1;
  314.  
  315.       for(int var4 = 0; var4 < this.parArea.size(); ++var4) {
  316.          if (((Rectangle)this.parArea.elementAt(var4)).inside(var1, var2)) {
  317.             var3 = var4;
  318.          }
  319.       }
  320.  
  321.       return var3;
  322.    }
  323.  
  324.    private void drawImage(int var1, int var2, Graphics var3) {
  325.       if (var1 != -1) {
  326.          Rectangle var4 = (Rectangle)this.parArea.elementAt(var1);
  327.  
  328.          try {
  329.             switch (var2) {
  330.                case 0:
  331.                   ((Graphics)this.areaGraphics.elementAt(var1)).drawImage(this.normalImage, -var4.x, -var4.y, this);
  332.                   return;
  333.                case 1:
  334.                   ((Graphics)this.areaGraphics.elementAt(var1)).drawImage(this.overImage, -var4.x, -var4.y, this);
  335.                   return;
  336.                case 2:
  337.                   ((Graphics)this.areaGraphics.elementAt(var1)).drawImage(this.clickImage, -var4.x, -var4.y, this);
  338.                   return;
  339.             }
  340.          } catch (NullPointerException var5) {
  341.             return;
  342.          }
  343.       }
  344.  
  345.    }
  346.  
  347.    private void delay(int var1) {
  348.       try {
  349.          Thread.sleep((long)var1);
  350.       } catch (InterruptedException var2) {
  351.       }
  352.    }
  353. }
  354.